/**
 * Session store class
 *
 * Copyright 2013 Thinstuff Technologies GmbH
 * Copyright 2013 DI (FH) Martin Haimberger <martin.haimberger@thinstuff.at>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


		// TODO USE SMART POINTERS to guard the Sesison objects

#ifndef SESSIONSTORE_H_
#define SESSIONSTORE_H_

#include <config.h>

#include "Session.h"

#include <string>
#include <winpr/synch.h>
#include <map>

namespace freerds{
	namespace sessionmanager{
		namespace session{

		typedef std::map<long , Session*> TSessionMap;
		typedef std::pair<long, Session*> TSessionPair;


		class SessionStore{
		public:
			SessionStore();
			~SessionStore();

			Session *getSession(long sessionID);
			Session *createSession();
			int removeSession(long sessionID);

		private:
			TSessionMap mSessionMap;
			long mNextSessionId;
			CRITICAL_SECTION mCSection;
		};

		}
	}
}

namespace sessionNS = freerds::sessionmanager::session;

#endif
